import type { NavigationGuardNext, RouteLocationNormalized } from 'vue-router';
import { useNProgress } from '@vueuse/integrations/useNProgress';
import { createRouter, createWebHistory } from 'vue-router';
import { ROUTER_WHITE_LIST } from '@/config';
import { errorRouter, layoutRouter, staticRouter } from '@/routers/modules/staticRouter';
import { useSystemStore, useUserStore } from '@/stores';

const { start, done } = useNProgress(0, {
  showSpinner: false,
  trickleSpeed: 200,
  minimum: 0.3,
  easing: 'ease',
  speed: 500,
});

const router = createRouter({
  history: createWebHistory(),
  routes: [...layoutRouter, ...staticRouter, ...errorRouter],
  strict: false,
  scrollBehavior: () => ({ left: 0, top: 0 }),
});

// 路由前置守卫
router.beforeEach(
  async (
    to: RouteLocationNormalized,
    _from: RouteLocationNormalized,
    next: NavigationGuardNext,
  ) => {
    const userStore = useUserStore();
    const systemStore = useSystemStore();

    // 1、NProgress 开始
    start();

    // 2、标题
    document.title = (to.meta.title as string) || (import.meta.env.VITE_WEB_TITLE as string);

    // 3、初始化系统
    if (!systemStore.initialized) {
      await systemStore.initSystem();
    }

    // 3、权限 预留
    // 3、判断是访问登陆页，有Token访问当前页面，token过期访问接口，axios封装则自动跳转登录页面，没有Token重置路由到登陆页。
    // if (to.path.toLocaleLowerCase() === LOGIN_URL) {
    //   // 有Token访问当前页面
    //   if (userStore.token) {
    //     return next(from.fullPath);
    //   }
    //   else {
    //     ElMessage.error('账号身份已过期，请重新登录');
    //   }
    //   // 没有Token重置路由到登陆页。
    //   // resetRouter();  // 预留
    //   return next();
    // }

    // 4、判断访问页面是否在路由白名单地址[静态路由]中，如果存在直接放行。
    if (ROUTER_WHITE_LIST.includes(to.path))
      return next();

    // 特殊处理：允许访问具体的聊天会话页面（/chat/:id格式）
    if (to.path.startsWith('/chat/') && to.params?.id) {
      return next();
    }

    // 5、判断是否有 Token，没有重定向到 login 页面。
    if (!userStore.token)
      userStore.logout();

    // 其余逻辑 预留...

    // 6、正常访问页面。
    next();
  },
);

// 路由跳转错误
router.onError((_) => {
  // 结束全屏动画
  done();
});

// 后置路由
router.afterEach(async (to, from) => {
  // 结束全屏动画
  done();

  // 只有当路由真正变化时才调用接口（路径或参数不同）
  if (to.path !== from.path || JSON.stringify(to.params) !== JSON.stringify(from.params)) {
    // 在所有接口加载完毕后，将页面title和url传给system/share接口
    // 使用setTimeout确保在页面渲染和接口加载完成后执行
    setTimeout(async () => {
      try {
        // 导入sharePageInfo接口
        const { sharePageInfo } = await import('@/api/system');

        // 获取当前页面title和url
        const title = document.title || (to.meta.title as string) || (import.meta.env.VITE_WEB_TITLE as string);
        const url = window.location.href;

        // 只有当title和url都存在时才发送请求
        if (title && url) {
          await sharePageInfo({ title, url });
        }

        // 在手机微信访问或开发环境下首次访问时引入微信JSSDK
        const { isWeChat, isDevelopment, loadWeChatJSSDK, initWeChatShare } = await import('@/utils/wechat');

        if (isWeChat() || isDevelopment()) {
          // 加载微信JSSDK
          await loadWeChatJSSDK();

          // 初始化微信分享配置
          await initWeChatShare({
            title,
            desc: '新青年AI助手 - 智能对话，高效工作',
            link: url,
            imgUrl: 'https://www.xqnmz.com/static/image/default.jpg',
          });
        }
      }
      catch (error) {
        // 静默处理错误，不影响页面正常功能
        console.error('分享页面信息失败:', error);
      }
    }, 1000); // 延迟1秒确保页面完全加载
  }
});

export default router;
